package latticensprings;

import java.util.ArrayList;

import processing.core.PApplet;

import toxi.geom.Vec3D;
import toxi.geom.mesh.Face;
import toxi.geom.mesh.TriangleMesh;

public class SurfaceGenerator {
	PApplet parent;
	ArrayList<TriangleMesh>meshes;
	Vec3D offset;
	int DIM = 300;
	int GRID = 20;
	

	SurfaceGenerator(PApplet _p, Vec3D _oS)
	{
		parent = _p;
		meshes = new ArrayList<TriangleMesh>();
		offset = _oS;
	}
	SurfaceGenerator(PApplet _p, Vec3D _oS, int _dim, int _grid)
	{
		parent = _p;
		meshes = new ArrayList<TriangleMesh>();
		offset = _oS;
		DIM = _dim;
		GRID = _grid;
	}
	
	void update(ArrayList<Creature> creatures)
	{
		for(Creature c : creatures)
		{
			
		}
	}
	
	void render()
	{
		for(TriangleMesh tM : meshes)
		{
			int num = tM.getNumFaces();
			tM.computeVertexNormals();
			for(int i=0; i<num;i++)
			{
				Face f = tM.faces.get(i);
				//Vec3D col = f.a.add(colAmp).scaleSelf(0.5f);
			}
		}
	}
//	void computeVolume() {
//		  float cellSize=(float)DIM*2/GRID;
//		  Vec3D pos=new Vec3D();
//		  //offset=physics.getWorldBounds().getMin();
//		  //Vec3D offset=new Vec3D();
//
//		  float[] volumeData=volume.getData();
//		  for(int z=0,index=0; z<GRID; z++) {
//		    pos.z=z*cellSize+offset.z;
//		    for(int y=0; y<GRID; y++) {
//		      pos.y=y*cellSize+offset.y;
//		      for(int x=0; x<GRID; x++) {
//		        pos.x=x*cellSize+offset.x;
//		        float val=0;
//		        for(int i=0; i<288; i++) {
//		    //      Vec3D p=(Vec3D)physics.particles.get(i);
//		          float mag=pos.distanceToSquared(p)+0.00001f;
//		          val+=1/mag;
//		        }
//		        volumeData[index++]=val;
//		      }
//		    }
//		  }
//		  if (true) {
//		    //volume.closeSides();
//		  }
//		  //surface.reset();
//		  //surface.computeSurfaceMesh(mesh,isoThreshold*0.001f);
//		}

//		void drawFilledMesh() {
//		 // int num=mesh.getNumFaces();
//		 // mesh.computeVertexNormals();
//		  for(int i=0; i<num; i++) {
//		    Face f=mesh.faces.get(i);
//		    Vec3D col=f.a.add(colAmp).scaleSelf(0.5f);
//		    parent.fill(col.x,col.y,col.z);
//		    normal(f.a.normal);
//		    vertex(f.a);
//		    col=f.b.add(colAmp).scaleSelf(0.5f);
//		    parent.fill(col.x,col.y,col.z);
//		    normal(f.b.normal);
//		    vertex(f.b);
//		    col=f.c.add(colAmp).scaleSelf(0.5f);
//		    parent.fill(col.x,col.y,col.z);
//		    normal(f.c.normal);
//		    vertex(f.c);
//		  }
//		}
		TriangleMesh getVolume(ArrayList<Vec3D> creature)
		{
			TriangleMesh creatureVolume = new TriangleMesh("creature");
			
			return creatureVolume;
		}
		void normal(Vec3D v) {
			parent.normal(v.x,v.y,v.z);
		}

		void vertex(Vec3D v) {
			parent.vertex(v.x,v.y,v.z);
		}
	
}
